const Koa = require("koa");
const KoaRouter = require("koa-router");
const bodyparser = require("koa-bodyparser");
const query = require("./mysql");

const app = new Koa();
const router = new KoaRouter();

// RESTful 规范
// 路径不能出现动词，一般以资源存储的表名的复数作为路径名称
// 请求方式表示操作动作
router.post("/addresses", async (ctx) => {
    // 解构数据
    let { name, address, mobile, is_default = 0, tag = "" } = ctx.request.body;
    // 非空校验
    if (!name || !address || !mobile) {
        ctx.body = {
            code: 400,
            message: "缺少参数",
        };
        return;
    }
    // 校验默认地址参数
    if (isNaN(is_default) || ![0, 1].includes(Number(is_default))) {
        ctx.body = {
            code: 400,
            message: "默认地址参数不正确",
        };
        return;
    }
    is_default = Number(is_default);
    // 判断当前添加的这个地址，是不是默认地址
    if (is_default === 1) {
        await query("update address set is_default = 0 where is_default = 1");
    }
    // 添加这个地址
    const res = await query(
        "insert into address (name, address, mobile, is_default, tag) values (?, ?, ?, ?, ?)",
        [name, address, mobile, is_default, tag]
    );
    // 判断成功
    if (res.affectedRows === 1) {
        ctx.body = {
            code: 201,
            message: "添加地址成功",
        };
    }
});

// 查询列表
router.get("/addresses", async (ctx) => {
    // 分页
    // 直接查询数据库，返回结果
    const res = await query("select * from address");
    // 返回响应给客户端
    ctx.body = {
        code: 200,
        data: res,
        message: "查询成功",
    };
});

router.get("/addresses/:id", async (ctx) => {
    // 接收路径参数
    const { id } = ctx.params;
    // 直接查询数据库，返回结果
    const res = await query("select * from address where id = ?", [id]);
    // 返回响应给客户端
    ctx.body = {
        code: 200,
        data: res[0],
        message: "查询成功",
    };
});

router.put("/addresses/:id", async (ctx) => {
    // 接收路径参数
    const { id } = ctx.params;
    // 修改的内容
    const { name, mobile, address, is_default } = ctx.request.body;
});

app.use(bodyparser());
app.use(router.routes());

app.listen(9000, () => {
    console.log("服务已启动");
});
